from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate, \
    MessagesPlaceholder

from entity.database.sqlite import Messages

import logging

model=init_chat_model(
    model="deepseek-v3",
    model_provider="openai",
    api_key="",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=0.5,
    max_tokens=800
)

history=[

]

async def use_model(user_input:str,session_id: int):
    """
        在进行会话记忆时，需要先往表中插入数据
    """

    """
    使用 DeepSeek V3 自动生成文本
    :param input: 用户输入
    :param session_id: 会话id
    :return: 生成的文本内容
    """

    messages=[
        SystemMessage(content="你是小爱"),
        HumanMessage(content=user_input)
    ]

    prompt_text="""
        你是一个智能助手
    """

    #if await Messages.get(id=session_id) is None:
    #    Messages.create(id=session_id,message=None)
    #iiii=await Messages.create(id=session_id,message="不许胡说八道")

    #chat_history = await Messages.filter(id=session_id).values("message").first()
    chat_history = await Messages.get(id=session_id)
    chat_history=chat_history.message

    prompt_template = ChatPromptTemplate.from_messages(
        [
            ("system",prompt_text),
            MessagesPlaceholder("chat_history"),
            ("human","我的问题是{question}")
        ]
    )

    history.append(AIMessage(content=chat_history))
    history.append(HumanMessage(content=user_input))



    # prompt_template = ChatPromptTemplate.from_messages(
    #     [
    #         SystemMessagePromptTemplate.from_template(
    #             "你的名字是{ai_name}"
    #         ),
    #         HumanMessagePromptTemplate.from_template(
    #             "我的问题是:{question}"
    #         )
    #     ]
    # )
    #
    # messages = prompt_template.invoke({
    #     "ai_name": "小艺，我是华为公司的人工智能助手",
    #     "question": user_input
    # })
    #
    #
    # prompt_text = """
    #             (C) 上下文：
    #             输入是一段包含公司信息的文本（如网页、文档、聊天记录等）。
    #             需要从中提取公司名称和公司电话，并确保数据准确无误。
    #
    #             (O) 目标：
    #             从文本中精准识别并提取公司名称和公司电话。
    #             输出纯JSON格式，不包含任何额外文本或解释。
    #
    #             (S) 风格：
    #             高度结构化，仅关注数据提取，不进行额外分析或描述。
    #
    #             (T) 语气：
    #             简洁、精准、无冗余，避免任何非必要的输出。
    #
    #             (A) 受众：
    #             自动化系统（如数据爬虫、API接口），需要直接解析JSON数据。
    #
    #             (R) 响应：
    #             仅输出JSON，格式如下：
    #             {{
    #               "companies": [
    #                 {{
    #                   "company_name": "提取的公司名称",
    #                   "phone": "提取的电话号码"
    #                 }}
    #               ]
    #             }}
    #
    #             禁止包含任何额外文本（如“以下是提取结果：”等）。
    #             也不要采用markdown格式，在json外层不要加任何标记或注释"""
    #
    #
    #
    # prompt_template = ChatPromptTemplate.from_messages(
    #     [
    #         ("system",prompt_text),
    #         ("human","我的问题是:{question}")
    #     ]
    # )
    #
    messages = prompt_template.invoke({"question":user_input,"chat_history":history})

    response=model.invoke(input= messages)

    shujuone=await Messages.get_or_none(id=session_id)
    shujuone.id=session_id
    shujuone.message=response.content
    message_insert=await shujuone.save()

    #history.append(AIMessage(content=response.content))
    logging.info(f"机器人生成结果{response.content}")
    return response.content



async def generate_xhs_by_subject(user_input:str):

    """
     使用 DeepSeek V3 自动生成文本
     :param user_input: 用户输入文本
     :return: 生成的文本内容
    """



    prompt_text = """
        (C) 上下文：
        用户提供任意形式的内容输入（如产品描述、个人经历、图片、关键词等），作为生成小红书风格文案的基础素材。
        
        (O) 目标：
        基于用户输入内容，生成一段符合小红书平台调性的文案，用于社交媒体分享或种草推广。
        
        (S) 风格：
        口语化、生活化、情绪饱满，突出个人体验和情感共鸣，融入网络热词与表情包，不使用正式书面语。
        
        (T) 语气：
        活泼亲切，带点“姐妹聊天”的感觉，适当使用感叹句、疑问句增强互动感。
        
        (A) 受众：
        普通用户、博主、品牌方、内容创作者等，希望在小红书平台发布吸引人的文案。

        (R) 响应：
        请直接输出一段完整的小红书风格文案，包含标题、正文、互动引导和相关表情符号，不使用Markdown格式，不解释生成逻辑。

    """

    prompt_template=ChatPromptTemplate.from_messages(
        [
            ("system",prompt_text),
            ("human","我的问题是:{question}")
        ]
    )
    message=prompt_template.invoke({"question":user_input})
    response=model.invoke(input=message)
    logging.info(f"小红书生成结果{response.content}")
    return response.content
